#pragma once

#include "../NavData.h"
#include "../../Static/Mathf.h"
#include "../../Static/Matrixf.h"
#include "../../Util/utility.hpp"

namespace ns_Position
{
    class CartesianCRD;
    
    using namespace ns_Data;
    using namespace ns_Util;

    class CoordinateSys : public NavData
    {
        using RefCoordinateSys = CartesianCRD;

    public:
        using Ptr = std::shared_ptr<CoordinateSys>;

    public:
        // 将当前坐标系转换为基准坐标系，返回转换后的坐标系的指针
        // 如果当前坐标未被初始化，则返回一个空指针
        virtual bool ToCartesianCRD(CartesianCRD *out) const = 0;
        // 将传入的基准坐标系转换为当前坐标系，修改当前坐标系中的数据并返回指针
        // 如果基准坐标系是一个空指针或未被初始化，则返回一个空指针
        virtual bool FromCartesianCRD(const CartesianCRD &ref) = 0;
    };
}